package in.lib.holder;
import in.lib.adapter.ChannelAdapter;
import in.lib.annotation.InjectView;
import in.lib.helper.ThemeHelper;
import in.lib.manager.SettingsManager;
import in.lib.utils.Views;
import in.lib.view.LinkifiedTextView;
import in.model.Channel;
import in.model.Channel.Type;
import in.model.SimpleUser;
import in.rob.client.MainApplication;
import in.rob.client.R;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
/**
* View holder for list item which holds references
* to the views so its like uber quick
* @author Robin
*/
public class ChannelHolder
{
public View view;
@InjectView(R.id.title) public TextView title;
@InjectView(R.id.time) public TextView time;
@InjectView(R.id.avatar_container) public ViewGroup avatarContainer;
@InjectView(R.id.text) public LinkifiedTextView text;
@InjectView(R.id.padlock) public View padlock;
public ChannelHolder(View convertView)
{
view = convertView;
Views.inject(this, convertView);
}
/**
* Method to use when populating a view's members with the
* data from post.
* @param inflater The inflater to use when creating new views
* @param holder The holder containing the views
* @param post The post object
*/
public void populate(Channel channel, final ChannelAdapter adapter)
{
StringBuilder channelTitle = new StringBuilder(channel.getReaders().size() * 20);
padlock.setVisibility(View.GONE);
avatarContainer.removeAllViews();
time.setText("");
if (channel.isUnread())
{
int newItem = ThemeHelper.getDrawableResource(view.getContext(), R.attr.rbn_channel_new_item_bg);
view.setBackgroundResource(newItem);
}
else
{
int normal = ThemeHelper.getDrawableResource(view.getContext(), R.attr.rbn_channel_item_bg);
view.setBackgroundResource(normal);
}
if (channel.getType() == Type.PRIVATE_MESSAGE)
{
padlock.setVisibility(View.VISIBLE);
}
text.setLinkMovementMethod(null);
if (channel.getRecentMessage() != null && !channel.getRecentMessage().getId().equals("-1"))
{
time.setText(channel.getRecentMessage().getDateStr());
text.setText("</b><a href=\"\">@" + channel.getRecentMessage().getPoster().getMentionName() + "</a>:</b> " + channel.getRecentMessage().getFormattedText());
text.setVisibility(View.VISIBLE);
}
else
{
time.setText("");
text.setVisibility(View.GONE);
}
// avatar
if (SettingsManager.getShowAvatars())
{
avatarContainer.setVisibility(View.VISIBLE);
if (channel.getUsers() != null && channel.getUsers().size() > 0)
{
for (final SimpleUser user : channel.getUsers())
{
if (user == null || user.getId().equals("-1")) continue;
if (channelTitle.length() > 0)
{
channelTitle.append(", ");
}
channelTitle.append("@").append(user.getMentionName());
ImageView image = (ImageView)adapter.getLayoutInflater().inflate(R.layout.channel_list_stub_avatar, avatarContainer, false);
avatarContainer.addView(image);
image.setTag(R.id.TAG_USER_ID, user);
image.setContentDescription(user.getMentionName());
ImageLoader.getInstance().displayImage(user.getAvatarUrl() + "?avatar=1&id=" + user.getId(), image, MainApplication.getAvatarImageOptions());
}
}
}
else
{
if (channel.getUsers() != null && channel.getUsers().size() > 0)
{
for (final SimpleUser user : channel.getUsers())
{
if (user == null || user.getId().equals("-1")) continue;
if (channelTitle.length() > 0)
{
channelTitle.append(", ");
}
channelTitle.append("@").append(user.getMentionName());
}
}
avatarContainer.setVisibility(View.GONE);
}
if (!TextUtils.isEmpty(channel.getTitle()))
{
channelTitle = new StringBuilder(channelTitle.length() + 20).append(channel.getTitle()).append(" - ").append(channelTitle);
}
title.setText(channelTitle.toString());
if (SettingsManager.isCustomFontsEnabled())
{
title.setTypeface(Typeface.defaultFromStyle(0));
text.setTypeface(Typeface.defaultFromStyle(0));
}
}
}